哇什麼都還不太懂就要做一個應用程式上線了?
才上第二堂課而已
先來看結果
這是一個可以自己上傳狗或貓的網站,網站會幫你做影像辨識是貓還是狗
馬上來玩一下
嗯...可以看到我們的模型還有許多改進的空間!
但是就上了2堂課就可以做出這種東西,我們趕快來學學!
今天一樣是要先抓資料,訓練模型,但這邊不一樣的地方是我們會得到一個「已訓練好的」模型
我們觀察網站的行為,是由使用者上傳「圖片」,他回應我們「結果」
所以這個模型的input 是圖片,由透過javascript ,上傳到後端api,api 接到圖片後,會調用「已訓練模型」
就會回應結果,回應該給使用者,使用者瀏覽器再render到頁面上。
所以我們能得到一個「已訓練的模型」就可以拿來做應用開發了呢!
趕緊來看看今天的流程(也可以用前一天的森林/鳥 模型來做)
流程都在下面這個notebook
https://colab.research.google.com/drive/1Uet3gvLzoHuuD6FgOgd3YRhC-e0bLqIL?usp=sharing
以下挑重點講
path = untar_data(URLs.PETS)/'images'
dls = ImageDataLoaders.from_name_func('.',
get_image_files(path), valid_pct=0.2, seed=42,
label_func=is_cat,
item_tfms=Resize(192))
這邊已經不再慢慢抓圖,直接用資料集
fastai 的untar_data 可以幫我們把資料集都下載下來直接使用
就免去抓圖以及整理資料的手續,可以更快的開始集中在學習模型的構建上
那我們怎麼知道有哪些資料集呢?
# 印出可用的資料集
available_datasets = URLs.__dict__
for dataset_name, dataset_url in available_datasets.items():
print(f"Dataset Name: {dataset_name}, URL: {dataset_url}")
這邊我們可以看得到我們後面要用的PETS 資料集
那有了資料集,我們就直接拿來訓練
learn = vision_learner(dls, resnet18, metrics=error_rate)
learn.fine_tune(4)
這邊選用resnet18 來訓練我們的資料
那做到這邊就可以得到我們的model了,看起來結果還不錯,那我們都訓練好模型
能不能匯出呢? 這樣以後就不用一直重複跑訓練過程
learn.export('model.pkl')
哦,這邊我們就得到我們要拿來用的model了
讓我們先來測試一下他到底能不能用
以下是測試的notebook
其中測試的圖片我是放在同一個資料夾,但colab執行階段完就會自動刪除圖片,要放在雲端硬碟才不會消失
不過我是在local 端跑的 ,所以就沒特別放在雲端硬碟
所以沒放圖片會出錯哦! 隨便抓幾張圖放進去當範例圖就好
那我們有了訓練好的model ,怎麼讀取呢?
import pathlib
temp = pathlib.PosixPath
pathlib.PosixPath = pathlib.WindowsPath
learn = load_learner('model.pkl')
其實只要learn = load_learner('model.pkl') 這行就好
只是因為我在colab 上訓練,但是在winodws 桌機上跑test
所以會出現需要轉換的流程
那我們已經load 好模型了,要怎麼用呢
learn.predict(im)
這樣就好嘍! 在這邊是隨意選一張狗的圖片,讓他判斷是否是貓
看起來可以用!
後面就是教我們怎麼用gradio,當然會前後端的人就可以自己做前後端
開頭那個網頁就是用gradio 自動產生的,很吸引人巴!
那所以我們要使用gradio, 就要給他一些輸入讓他產生網站
intf=gr.Interface(fn=classify_image,inputs=image,outputs=label,examples=examples)
intf.launch(inline=False,share=True)
由網站可以得知 ,我們要有輸入,輸出,要有判斷函式(裡面就是調用模型來predict)
範例圖片(當然自行開發網站的話,並不一定需要)
跑完就會出現一個網站了哦~
其中也提供huggingface 的空間來讓我們方便佈署,我以後如果會把模型放在huggingface 的話,再來研究